package jmine.tec.hydra.receive;

import java.io.InputStream;

import jmine.tec.hydra.HydraController;
import jmine.tec.hydra.domain.HydraSystem;

/**
 * Interface que determina o comportamento das implementações responsáveis por receber as mensagens.
 * 
 * @author piercio
 */
public interface Receiver {

    /**
     * Processo executado antes do recebimento da mensagem.
     */
    void processBeforeReceive();

    /**
     * Recebe a mensagem.
     * 
     * @param message a mensagem recebida.
     */
    void receive(InputStream message);

    /**
     * Processo executado após o recebimento da mensagem.
     */
    void processAfterReceive();

    /**
     * Define o controller do Hydra.
     * 
     * @param hydraController o controller do Hydra.
     */
    void setHydraController(HydraController hydraController);

    /**
     * Define o sistema de integração que esse receiver controla.
     * 
     * @param system o sistema de integração.
     */
    void setSystem(HydraSystem system);
}
